﻿#pragma once
#ifndef XL_XEXPAND_DWEBX_WOREQUESTER_H
//@隐藏{
#define XL_XEXPAND_DWEBX_WOREQUESTER_H
#ifdef WEBOAT_EXPORTS

#include "pch.h"
#include "WoDLLExport.h"
//#include "module_WebOat.h"

#else

#endif
//@隐藏}

//@别名 Wo传入请求类
class WEBOAT_MODIFICATION WoHTTPIncomingRequestClass {
private:
    WoHTTPIncomingRequestPtr m_IncomingRequest;
    //WoHTTPContext* m_context;
public:
    //@隐藏{
    WoHTTPIncomingRequestClass();

    WoHTTPIncomingRequestClass(const WoHTTPIncomingRequestPtr &ptr, WoHTTPContext *ctx);

    ~WoHTTPIncomingRequestClass() {};

    void operator=(WoHTTPIncomingRequestPtr &ptr);

    //void operator=(WoHTTPContext* ctx) { m_context = ctx; };
    operator WoHTTPIncomingRequestPtr &();
    //@隐藏}

    //@参数 参数名 如:/user/{userId} ,则:"userId"
    //@别名 取路径参数(参数名)
    CXTextA GetPathVariable(const char *name);

    //@备注 取出所有路径变量
    //@参数 返回数据 例如 /delete/{name}/{id} -> /delete/huiyi/1 ,取回 map{"name":"huiyi","id":"1"}
    //@别名 取所有路径参数(返回数据)
    void GetPathVariables(CXMap<CXTextA, CXTextA> &rmap);

    //@别名 取路径()
    CXTextA GetPath();

    //@参数 键名 例如:"user-agent"
    //@别名 取请求头(键名)
    CXTextA GetHander(const char *key);

    //@参数 用于接收所有请求头的字典
    //@别名 取所有请求头(返回数据)
    void GetHanders(CXMap<CXTextA, CXTextA> &rmap);

    //@备注 快速获取请求头中的JWT文本
    // .例如: 当 参数[请求头]="Authorization"
    // .当 参数[前缀]="Bearer"时
    // 对应: Authorization: Bearer JWTSTR
    //@别名 取请求头中JWT文本(请求指针,请求头,前缀)
    CXTextA GetJWTAuthStr(const char *hander = "Authorization", const char *prefix = "Bearer");

    //@别名 取查询参数(参数名)
    CXTextA GetQueryParameter(const char *name);

    //@备注 例如 /path?id=1 返回 "?id=1"
    //@别名 取路径尾()
    CXTextA GetPathTail();

    //@别名 Body_到文本(返回文本)
    void GetBodyToString(CXTextA &str);

    //@别名 Body_到字节集(返回字节集)
    void GetBodyToByte(CXBytes &str);
};


#endif
